Resource pools can include a dynamic number of similar resources that are used to perform computing tasks or work requests. Each resource in the resource pool at a given time can be described as a resource instance, and the resource instances together make up the resource pool. Work requests enter the resource pool as a result of an application program interface call or other examples. When there are more work requests than resource instances available to do the requested work, as is often the case, the work requests are arranged in a work queue. As soon as a resource instance completes the work on a work request, the resource instance is made available for another work request in the queue. Examples of resource management systems include the .NET thread pool, server pools in the Tivoli Workload scheduler, and HP Global Workload Manager, and application instances in IBM WebSphere.
There are many examples of resource instances and work requests in computing. Such examples can include servers and applications. One particular example is the use of threads in a thread pool to process work requests in concurrent programs. Often, each thread can be assigned to a different processor or processing core. Also, multiple threads assigned to a single processor or processing core can be time multiplexed through the processor. A resource manager can be used to create threads when the amount of work is too high, or it can be used to destroy or make idle threads when the amount of work is too low.
There have been attempts to address the issue of finding the proper amount of resource instances to perform a given set of tasks. One early model was to develop techniques that keep all of the processors fully realized. In most cases, however, the designer will not know what resources will create a bottleneck in throughput and will not be able to compensate for it. System designers also use algorithms to determine whether resource instances, such as threads, can be created, made idle, or destroyed to optimize performance. Such algorithms are typically primarily focused on the amount of resource instances made available to perform the work requests in a queue.
In a typical model, however, the rate of work completion is related to both the nature of the work itself and the amount of resource instances available, both of which can be unknown beforehand and constantly change. Although many systems incorporate resource pools with resource instances that are managed dynamically, there remains a need to improve management in many of these systems.